package torres.entity;

import java.util.*;


/**
 * @author Torres
 * A specific Occupation that specializes in disabling and avoiding
 * traps. The primary stat of a Sneak is Agility.
 */
@SuppressWarnings("serial")
public class Sneak implements Occupation {
	private List<Ability> sneakAbilityList;
	private final Stat sneakPrimaryStat = Stat.AGILITY;
	private final Job job = Job.SNEAK;
	private double sneakStrengthMultiplier;
	private double sneakAgilityMultiplier;
	private double sneakIntellectMultiplier;
	private final String name = "Sneak";
	
	/**
	 * Creates a default Sneak
	 */
	public Sneak() { // Default Constructor
		sneakAbilityList = new ArrayList<Ability>();
		sneakStrengthMultiplier = 1.15;
		sneakAgilityMultiplier = 1.3;
		sneakIntellectMultiplier = 1.15;
	}
	
	/**
	 * Creates a new Sneak with the specified values. 
	 * @param abilityList The ability list.
	 * @param strength The strength multiplier.
	 * @param agility The agility multiplier.
	 * @param intellect The intellect multiplier.
	 */
	public Sneak(List<Ability> abilityList, double strength, double agility, double intellect) {
		this.sneakAbilityList = abilityList;
		this.sneakStrengthMultiplier = strength;
		this.sneakAgilityMultiplier = agility;
		this.sneakIntellectMultiplier = intellect;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getAgilityMultiplier()
	 */
	public double getAgilityMultiplier() {
		return sneakAgilityMultiplier;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getIntellectMultiplier()
	 */
	public double getIntellectMultiplier() {
		return sneakIntellectMultiplier;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getPrimaryStat()
	 */
	public Stat getPrimaryStat() {
		return sneakPrimaryStat;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getStrengthMultiplier()
	 */
	public double getStrengthMultiplier() {
		return sneakStrengthMultiplier;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getAbilityList()
	 */
	public List<Ability> getAbilityList() {
		return sneakAbilityList;
	}
	
	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getJob()
	 */
	public Job getJob() {
		return job;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return name;
	}
}
